"""类"""""

'''定义'''
# 类就是用来描述具有相同属性(变量)和方法(函数)的集合

'''如何创建一个类'''


# class 类的名字(继承的类): # 类名必须是驼峰命名法，它的父类是谁，如果不写默认继承object类
#     类中的属性
#     类中的方法


class Demo2:    #不写括号也是默认继承object类
    pass

class Student:
    stu_score = 60  # 类属性

    def __init__(self, name, stu_class, phone,sex):  # 可以设置形参
        self.stu_info = {'名字': name, '班级': stu_class, '手机号': phone,'性别':sex}  # 实例属性

    def get_stu_info(self):  # 实例方法
        return self.stu_info

    @classmethod
    def get_stu_score(cls):  # 类方法
        return cls.stu_score # 返回的是类属性

    @property
    def get_stu_sex(self):  # 实例属性
        return self.stu_info.get('性别')

DengZe = Student('dengze','6班','18541241540','男') # 类的实例化
print(DengZe.get_stu_info()) # {'名字': 'dengze', '班级': '6班', '手机号': '18541241540', '性别': '男'}
print(DengZe.get_stu_sex) # 男 调用实例属性
print(DengZe.stu_info) # {'名字': 'dengze', '班级': '6班', '手机号': '18541241540', '性别': '男'} 调用实例属性
print(DengZe.get_stu_score()) # 60 调用类方法
print(Student.get_stu_score()) # 60 调用类方法
print(DengZe.stu_score) # 60 调用类属性


'''类中有什么'''
# 1、实例方法：在类中定义的函数(函数在外边叫函数，放类中叫方法，全称实例方法)
# 2、类方法：在实例方法的基础上使用装饰器@classmethod
# 3、实例属性：创建实例实例属性有两种方式
#   a、在__init__方法中定义的变量，就是类中的实例属性
#   b、在实例方法的基础上使用装饰器@property 可以将实例方法 -> 实例属性
# 4、类属性：在类中定义的变量，就是类属性
'''实例化'''
# 就是将类变为对象的过程，叫做实例化
# 如何实例化？ 类名(参数) 括号必须有，参数值可以没有.其中的参数就是init的形参

'''__init__'''
# 我们叫它 “类的初始化方法” ，什么时候会初始化？
# 当调用类的实例时，会进行初始化(不初始化就不会调用init方法)只要是有关于实例的就要用init方法
# 可以在init方法中定义实例属性，设置形参
# 有无init的区别
# 1、如果有，调用类的实例的时候，会最先调用init方法
# 2、如果有，调用类的时候，不会调用init方法
# 3、如果没有，在调用类的时候，会调用父类的init方法

'''self与cls'''
# self是 类的实例 的标识，实例方法，实例属性都有self
# cls 代表是 类 的表示